package fr.esiag.cryptanalyse;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 * Encapsule un dictionnaire.
 * 
 */
public class Dictionnaire {

	private Set<String> tst;

	/**
	 * Constructeur initialisant le dictionnaire avec le fichier passe en
	 * parametre.
	 * 
	 * @param fileName
	 *            nom du fichier dictionnaire
	 */
	public Dictionnaire(String fileName) {
		tst = loadDico2(fileName);
	}

	/**
	 * Fait une recherche sans accent et en minuscule dans le dictionnaire
	 * 
	 * @param mot
	 *            mot a chercher dans le dictionnaire
	 * @return
	 */
	public final boolean contient(String mot) {
		return tst.contains(Tools.sansAccent(mot.toLowerCase()));
	}

	/**
	 * Charge le dictionnaire dans un Arbre trie en minuscule et sans accent.
	 * 
	 * @param filename
	 *            nom du fichier dictionnaire
	 * @return Arbre trie.
	 */
	private SortedSet<String> loadDico2(String filename) {
		System.out.println("Chargement dictionnaire...");
		SortedSet<String> tst = new TreeSet<String>();
		try {
			// InputStream ips = new FileInputStream(filename);
			InputStream ips = this.getClass().getClassLoader()
					.getResourceAsStream(filename);
			InputStreamReader ipsr = new InputStreamReader(ips);
			BufferedReader br = new BufferedReader(ipsr);
			String ligne;
			while ((ligne = br.readLine()) != null) {
				tst.add(Tools.sansAccent(ligne));
			}
			br.close();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
		return tst;
	}
}
